<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function fn () {
            //普通函数
        }

        //构造函数的函数名的首字母通常大写
        function Fn (name) {
            //给调用函数的对象添加一个属性name，在把对象的实参赋值给属性name
            this.name = name
        }
        //当new构建函数是，行数默认执行了这几步代码
        //var obj = {} 创建一个空对象
        //this.name = name 执行代码给的新增属性
        //this = obj 将this指向给obj
        //return this  默认将thisreturn出函数

        var a = fn () //只是普通的把fn这个函数赋值给a
        console.log(a) //普通函数，这里没有return所以结果是undefined

        var obj = new Fn ('lisi') //构建函数，并给构建函数一个实参lisi

        console.log(obj)  //fn name: "lisi"  ;__proto__: Object
​       
        var obj2 = new Fn ('zhangsan')
        console.log(obj2) //fn name: "zhangsan"  ;__proto__: Object
    </script>
</body>
</html>